// app/middleware/organization_permission_middleware.js
'use strict';

module.exports = (options, app) => {
  return async function organizationPermissionMiddleware(ctx, next) {
    // 如果没有用户信息，直接通过（开发环境临时处理）
    if (!ctx.state.user) {
      await next();
      return;
    }

    // 获取请求中的组织ID参数
    const organizationId = ctx.params?.organizationId || ctx.query?.organizationId || ctx.request.body?.organizationId;
    
    // 如果没有指定组织ID，使用用户的默认组织
    if (!organizationId && ctx.state.currentOrganizationId) {
      ctx.state.organizationId = ctx.state.currentOrganizationId;
    } else if (organizationId) {
      ctx.state.organizationId = parseInt(organizationId);
    } else {
      ctx.state.organizationId = 1; // 默认组织ID
    }

    // 确保ctx.state.organizationId存在且有效
    if (!ctx.state.organizationId || isNaN(ctx.state.organizationId)) {
      ctx.state.organizationId = 1; // 设置默认组织ID
    }

    // 验证用户是否有权限访问该组织的数据
    const hasPermission = await checkOrganizationPermission(ctx, ctx.state.organizationId);
    if (!hasPermission) {
      ctx.status = 403;
      ctx.body = {
        code: 403,
        message: '您没有权限访问该组织的数据'
      };
      return;
    }

    await next();
  };

  // 检查用户是否有权限访问指定组织
  async function checkOrganizationPermission(ctx, organizationId) {
    // 确保organizationId存在且不是NaN
    if (!organizationId || isNaN(organizationId)) {
      return false;
    }
    
    // 超级管理员可以访问所有组织
    if (ctx.state.user && ctx.state.user.role === 'admin') {
      return true;
    }

    // 检查用户是否属于该组织
    if (ctx.state.user && ctx.state.user.id) {
      const userOrganization = await ctx.model.UserOrganizationModel.findOne({
        where: {
          userId: ctx.state.user.id,
          organizationId: organizationId,
          status: 'active'
        }
      });

      return !!userOrganization;
    }

    return false;
  }
};